草庐IT

Java Iterator(迭代器)

全部标签

c++ - end() 迭代器的算术运算

设A为std::vector,这是明确的吗?if(!A.empty())std::vector::iteratormyBack=A.end()-1;是end迭代器只适用于等式和不等式检查?或者只要我留在容器中,我就可以执行一些指针运算?在我的平台上,此代码有效。我想知道这是否是可移植的。 最佳答案 它是完全有效的,因为vector::iterator是一个随机访问迭代器。您可以对其执行算术运算,并且它不依赖于平台。std::vector::iteratorit=A.end();while(it!=A.begin()){--it;//

c++ - 在自定义迭代器上应用 reverse_iterator 后引用失效

我实现了一个双向迭代器,但它不是对数据结构进行操作,而是返回一个可以在两个方向上迭代计算的数学序列。事实上,我正在迭代整数,使用++和--在int上。这意味着数据不会存储在不同的结构中,因此当迭代器超出范围时,值也会超出范围。尽管如此,我希望下一个代码(最小失败示例)示例能够工作,因为迭代器始终保持在范围内。但它不起作用:(#include#include#includeclassmy_iterator:publicstd::iterator{intd_val=12;public:my_iteratoroperator--(int){std::cout();int&i=*it;if(t

c++ - 取消引用字符串迭代器产生 int

我收到这个错误comparisonbetweenpointerandinteger('int'and'constchar*')对于下面的代码#include#include#includeusingnamespacestd;intmain(){std::strings("teststring");for(autoi=s.begin();i!=s.end();++i){cout为什么取消引用字符串迭代器会产生int而不是std::string? 最佳答案 实际上,它不会产生int,它会产生char(因为字符串迭代器会迭代字符串中的字符

c++ - 如何将指针作为迭代器返回?

我需要实现迭代器,但我没有时间制作漂亮的迭代器类,所以我决定只返回指针。是这样的int*begin(){returnp;}但我希望它们像往常一样运行STL迭代器*++begin();//doesn'tworkbecausereturnedpointerisn'tl-valuestd::vectorvi{0,1};*++vi.begin();//worksfineint*p=begin();*++p;//worksfineaswell我该怎么做? 最佳答案 指针确实完全满足迭代器要求(指针甚至满足最专业的随机访问迭代器要求)。您的问题

c++ - 关于C++迭代器的问题

在C++中,为什么我们不能使用'>'或'”或“另外,为什么我们不能计算出迭代器的内容?例如“cout一般来说,迭代器和指针之间的内在区别是什么?我曾经认为它们很相似,但我想我必须理解这一点才能更深入地理解C++。问题#2:谢谢大家的精彩回答。我还有一个关于迭代器的问题。当迭代器越界时,为什么c++打印出类似“50397953”的内容?它不应该打印NULL或'\0'之类的东西吗? 最佳答案 std::list具有双向迭代器,要求它们具有可比性没有任何意义。甚至不清楚如何实现std::list为了符合这样的要求。然而,由于随机访问迭代器

c++ - 如何迭代 QListWidget 中的每个项目

我只能在互联网上找到任何示例如何循环并获取QListWidget中的每个项目 最佳答案 intcount=listWidget->count();for(intindex=0;indexitem(index);//Awilditemhasappeared}我认为foreach完全不同。如果你想了解更多信息,请看这个http://doc.qt.digia.com/4.2/containers.html#the-foreach-keyword向下滚动到它谈论foreach关键字的地方。特别感谢TomalakGeret'kal添加了我的键

c++ - 将迭代器和 vector 传递给函数

我有一些功能voidprint_elem(conststd::vector::iteratorit,conststd::vector&vec){/*.....*/}如果我忽略vector是对原始对象的引用,我会得到vector的拷贝。为什么迭代器不一样呢?为什么迭代器也不需要是引用?例如,如果我想遍历vector,打印每个元素并希望在到达vector末尾时停止,除非我传递对vector的引用,否则迭代只会连续遍历第一个vector拷贝。但是,如果我通过一个引用,迭代将通过原始vector对象。但是为什么迭代器不像没有引用的vector那样被复制呢? 最佳答案

c++ - std::map::begin() 之前的 STL 迭代器

在C++11的std::map中,是否有一些有效的迭代器x使得++x保证等于map::开始()?我想检测我刚刚调用的函数(我的)是否已经将迭代器从函数的前面移开。该函数会将迭代器恰好向后移动一个位置。答案是否适用于图书馆的其他人? 最佳答案 不,std容器中开始之前的迭代器都是UB(反向迭代器除外,它可能无法解决您的问题)。您可能需要修复有问题的函数。如果做不到这一点,请将其包装起来并在调用它之前捕获不良行为。如果做不到这一点,您可以在map键类型排序中插入一个负无穷大元素,并添加一个标记值。如果做不到这一点,您可以编写迭代器适配器

c++ - 使用迭代器将部分文件流读入字符串

这是我到目前为止尝试过但没有成功的方法:std::stringReadPartial(std::ifstream&_file,int_size){std::istreambuf_iteratorfirst(_file);std::istreambuf_iteratorlast(_file);std::advance(last,_size);returnstd::string(first,last);}我知道如何阅读整个文件。std::stringRead(std::ifstream&_file){std::istreambuf_iteratorfirst(_file);std::ist

c++ - 增量运算符/迭代器实现

我想在这里弄清楚几件事:如何为具有指向下一个节点的指针的节点类编写递增运算符?如何为如下类实现迭代器?#include#includeusingnamespacestd;templateclassNode{public:Node(inti=0):val(i){}Node*&operator++(inti=0){returnnext;};Tval;Node*next;};//================================================intmain(){Node*head,*tmp1,*tmp2;tmp1=newNode(0);head=tmp1;fo